home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / news / inn1.000 / inn1.4sec-linux-src.tar / inn / lib / lockfile.c < prev    next >
C/C++ Source or Header  |  1993-03-18  |  1KB  |  58 lines

  1. /*  $Revision: 1.4 $
  2. **
  3. */
  4. #include "configdata.h"
  5. #include <sys/types.h>
  6. #if    defined(LOCK_NONE)
  7. #include <sys/stat.h>
  8. #endif    /* defined(LOCK_NONE) */
  9. #if    defined(LOCK_FLOCK)
  10. #include <sys/file.h>
  11. #endif    /* defined(LOCK_FLOCK) */
  12. #if    defined(LOCK_LOCKF)
  13. #if    defined(DO_HAVE_UNISTD)
  14. #include <unistd.h>
  15. #endif    /* defined(DO_HAVE_UNISTD) */
  16. #include <fcntl.h>
  17. #endif    /* defined(LOCK_LOCKF) */
  18. #if    defined(LOCK_FCNTL)
  19. #include <fcntl.h>
  20. #if    !defined(SEEK_SET)
  21. #define SEEK_SET    0
  22. #endif    /* !defined(SEEK_SET) */
  23. #endif    /* defined(LOCK_FCNTL) */
  24.  
  25.  
  26. /*
  27. **  Try to lock a file descriptor.
  28. */
  29. int
  30. LockFile(fd, Block)
  31.     int        fd;
  32.     BOOL    Block;
  33. {
  34. #if    defined(LOCK_NONE)
  35.     struct stat    Sb;
  36.  
  37.     return fstat(fd, &Sb);
  38. #endif    /* defined(LOCK_NONE) */
  39.  
  40. #if    defined(LOCK_FLOCK)
  41.     return flock(fd, Block ? LOCK_EX : LOCK_EX | LOCK_NB);
  42. #endif    /* defined(LOCK_FLOCK) */
  43.  
  44. #if    defined(LOCK_LOCKF)
  45.     return lockf(fd, Block ? F_LOCK : F_TLOCK, 0L);
  46. #endif    /* defined(LOCK_LOCKF) */
  47.  
  48. #if    defined(LOCK_FCNTL)
  49.     struct flock    fl;
  50.  
  51.     fl.l_type = F_WRLCK;
  52.     fl.l_whence = SEEK_SET;
  53.     fl.l_start = 0;
  54.     fl.l_len = 0;
  55.     return fcntl(fd, Block ? F_SETLKW : F_SETLK, &fl);
  56. #endif    /* defined(LOCK_FCNTL) */
  57. }
  58.